#include<stdio.h>
#include<stdlib.h>
#include"DynamicArray.h"

#define true 1
#define false 0

int Initialize(struct DynamicArray *array)
{
    array->dp=(ElementType *)malloc(sizeof(ElementType)*array->size);
    if(array->dp==NULL)
    {
        printf("malloc error!\n");
        return false;
    }
    else
        return true;
}

void FreeArray(struct DynamicArray *array)
{
    if(array->dp!=NULL)
    {
        free(array->dp);
        array->dp=NULL;
        array->len=0;
    }
}


int ReallocArray(struct DynamicArray *array)
{
    ElementType *temp=array->dp;
    array->size=array->size*2;
    array->dp=(ElementType *)malloc(sizeof(ElementType)*array->size);
    if(array->dp==NULL)
    {
        printf("ReallocArray error!\n");
        array->dp=temp;
        array->size=array->size/2;
        return false;
    }

    for(int i=0;i<array->len;i++)
    {
        array->dp[i]=temp[i];
    }

    Free(temp);
    return true;
}

int InsertArray(struct DynamicArray *array,ElementType element)
{
    if(array->len==array->size)
    {
        if(ReallocArray(array)==false)
        {
            printf("can not contain more element\n");
            return false;
        }
    }
    array->dp[array->len]=element;
    array->len++;
    return true;
}

// void travel(struct DynamicArray *array)
// {
//     printf("array len :%d  array size :%d\n",array->len,array->size);
//     printf("===================================================\n");
//     for(int i=0;i<array->len;i++)
//     {
//         printf("%d ",array->dp[i]);
//     }
//     printf("\n");
//     printf("========================================================\n");
// }

// int main()
// {
//     struct DynamicArray array={NULL,10,0};
//     Initialize(&array);
//     for(int i=0;i<10;i++)
//     {
//         InsertArray(&array,i+1);
//     }
//     travel(&array);
//     for(int i=0;i<10;i++)
//     {
//         InsertArray(&array,(i+1)*10);
//     }
//     travel(&array);

//     FreeArray(&array);
//     return 0;
// }

